"use strict";

const Controller = require("egg").Controller;

/**
 * 成绩管理
 */
class ScoreController extends Controller {
  /**
   * 新增学生成绩
   */
  async create() {
    // 解构参数
    const { uid, theory, skill } = this.ctx.request.body;
    // 校验参数
    if (isNaN(theory) || isNaN(skill)) {
      this.ctx.body = {
        code: 400,
        message: "参数格式不正确",
      };
      return;
    }
    // 如果今天已录入成绩，不能重复录入
    let score = await this.service.score.readByToday(uid);
    if (score) {
      this.ctx.body = {
        code: 403,
        message: "该学生今日成绩已录入",
      };
      return;
    }
    // 存入数据库
    let res = await this.service.score.create({
      uid,
      theory,
      skill,
    });
    if (res.affectedRows !== 1) {
      this.ctx.body = {
        code: 500,
        message: "成绩录入失败，请稍后再试",
      };
      return;
    }
    // 返回成功响应
    this.ctx.body = {
      code: 201,
      message: "成绩录入成功",
    };
  }

  /**
   * 列表
   */
  async index() {
    // 传入 GET 请求参数，进行条件查询
    let res = await this.service.score.readListByQuery(this.ctx.request.query);
    // 返回查询的数据
    this.ctx.body = {
      code: 200,
      data: res,
      message: "获取成绩列表成功",
    };
  }

  /**
   * 更新
   */
  async update() {
    // 解构路径参数
    const { id } = this.ctx.params;
    // 解构请求体参数
    const { theory, skill } = this.ctx.request.body;
    if (!id) {
      throwRE(40001, "缺少唯一标识 id");
    }
    // 更新
    const res = await this.service.score.update({ id, theory, skill });

    // 返回响应
    if (res.affectedRows !== 1) {
      this.ctx.throwRE(40001, "更新失败");
    }
    this.ctx.success("", "更新成功");
  }

  /**
   * 删除
   */
  async destroy() {
    // 解构参数
    const { id } = this.ctx.params;
    if (!id) {
      this.ctx.throwRE(40001, "无法解析 id 参数");
    }
    console.log("id", id);
    // 删除
    await this.service.score.deleteById(id);
    // 响应成功
    this.ctx.success("", "删除成功");
  }
}

module.exports = ScoreController;
